package a_sorting_basic.c_insertion_sort;

public class MainTestC {
    public static void main(String[] args) {

        // 对于完全随机的数据
        int numbers = 30000;
        // 平均N^2 交换法
        new BubbleSortC().testSorting("Bubble Sort", numbers);
        // 平均N^2 交换法
        new SelectionSortC().testSorting("Selection Sort", numbers);
        // 平均N^2 最优N 插入法
        new InsertionSortC().testSorting("Insertion Sort", numbers);
        // 平均N^1.3~2 插入法
        new ShellSortC().testSorting("Shell Sort", numbers);

        // 对于近似排序好的数据， 优化过的插入排序效率超级高， 因为可以很大概率提前结束内层循环
        int swapTimes = 10;
        // 平均N^2 交换法
        new SelectionSortC().testNearlySorting("Selection Sort (nearly sorted)", numbers, swapTimes);
        // 平均N^2 交换法 对于近似排序好的数据， 冒泡比选择排序略有效
        new BubbleSortC().testNearlySorting("Bubble Sort (nearly sorted)", numbers, swapTimes);
        // 平均N^1.3~2 插入法 最优N
        new InsertionSortC().testNearlySorting("Insertion Sort (nearly sorted)", numbers, swapTimes);
        // 平均N^1.3~2 插入法 最优N^1.3 (取决于递增序列的选取)
        new ShellSortC().testNearlySorting("Shell Sort (nearly sorted)", numbers, swapTimes);
    }
}
